const mongoose = require('mongoose');

/**
 * 验证电子邮件格式
 * @param {string} email - 电子邮件地址
 * @returns {boolean} - 是否为有效格式
 */
const isValidEmail = (email) => {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
};

/**
 * 验证手机号码格式（简单验证，可根据需要调整）
 * @param {string} phone - 手机号码
 * @returns {boolean} - 是否为有效格式
 */
const isValidPhone = (phone) => {
  const phoneRegex = /^1[3-9]\d{9}$/;
  return phoneRegex.test(phone);
};

/**
 * 验证密码强度
 * @param {string} password - 密码
 * @returns {Object} - 包含验证结果和消息
 */
const validatePasswordStrength = (password) => {
  if (!password || password.length < 6) {
    return {
      isValid: false,
      message: '密码长度至少为6位'
    };
  }
  
  const hasUpperCase = /[A-Z]/.test(password);
  const hasLowerCase = /[a-z]/.test(password);
  const hasNumbers = /\d/.test(password);
  const hasSpecialChars = /[!@#$%^&*(),.?":{}|<>]/.test(password);
  
  // 至少满足两项条件
  const strengthCount = [hasUpperCase, hasLowerCase, hasNumbers, hasSpecialChars].filter(Boolean).length;
  
  if (strengthCount < 2) {
    return {
      isValid: false,
      message: '密码必须包含至少两种字符类型（大写字母、小写字母、数字、特殊字符）'
    };
  }
  
  return {
    isValid: true,
    message: '密码强度符合要求'
  };
};

/**
 * 验证MongoDB ObjectId格式
 * @param {string} id - 要验证的ID
 * @returns {boolean} - 是否为有效格式
 */
const isValidObjectId = (id) => {
  return mongoose.Types.ObjectId.isValid(id);
};

/**
 * 验证用户名格式
 * @param {string} username - 用户名
 * @returns {Object} - 包含验证结果和消息
 */
const validateUsername = (username) => {
  if (!username || username.length < 3) {
    return {
      isValid: false,
      message: '用户名长度至少为3位'
    };
  }
  
  if (!/^[a-zA-Z0-9_]+$/.test(username)) {
    return {
      isValid: false,
      message: '用户名只能包含字母、数字和下划线'
    };
  }
  
  return {
    isValid: true,
    message: '用户名格式正确'
  };
};

module.exports = {
  isValidEmail,
  isValidPhone,
  validatePasswordStrength,
  isValidObjectId,
  validateUsername
};